#include "UdpServer.hpp"

using namespace UdpServerArea;

int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        // 用法: 指定一个端口号
        LOG(LogLevel::ERROR) << "Usage: " << argv[0] << "localport";
        DIE(USAGE_ERR);
    }
    USE_CONSOLE_STRATEGY(); // 日志显示器刷新策略

    // 将传递过来的端口号转为 uint16_t
    uint16_t port = std::stoi(argv[1]);

    //用户管理模块
    std::shared_ptr<UserManager> user_ptr = std::make_shared<UserManager>();

    // 将 UdpServer对象 交给智能指针管理
    std::shared_ptr<UdpServer> udp_sptr = std::make_shared<UdpServer>(port);

    udp_sptr->RegisterService(
        [&user_ptr](InetAddr& id) { user_ptr->AddUser(id); }
        ,
        [&user_ptr](InetAddr& id) { user_ptr->RemoveUser(id); }
        ,
        [&user_ptr](int sockfd,const std::string& message) { user_ptr->Router(sockfd,message); }
    );

    // 初始化服务器Udp
    udp_sptr->InitServer();

    udp_sptr->Start();

    return 0;
}